<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //迭代器:iterator
      //某些数据 自带 迭代器
      //如果数据拥有一个Symbol.iterator 属性 那么 证明这个数据有自带的迭代器
      //迭代器拥有一个方法两个属性
      //next()方法,下一步   value 当前迭代的值  done:是否迭代完成

      //一.区分迭代器: Symbol.iterator
      //数组: 有迭代器   对象没有自带的迭代器
      // let arr = ["张三", "李四", "王五"];
      // console.log(arr);

      // let obj = {
      //   name: "张三",
      //   age: 20,
      // };
      // console.log(obj);

      //获取迭代器
      let arr = ["张三", "李四", "王五"];
      console.log(arr);
      //方式一: arr.[Symbol.iterator]()
      //延迟分布执行;
      var myIterator = arr[Symbol.iterator]();
      console.log(myIterator.next());
      console.log(myIterator.next());
      console.log(myIterator.next());
      console.log(myIterator.next());
      console.log(myIterator.next());
      console.log(myIterator.next());

      // function run() {
      //   var res = myIterator.next();
      //   if (!res.done) {
      //     //    没有执行完毕
      //     console.log(res);
      //     setTimeout(() => {
      //       run();
      //     }, 1000);
      //   } else {
      //     console.log("所有内容执行完成");
      //   }
      // }
      // run();
      /*
        第一次 ： res = {value:"张三",done:false}
                    过一秒之后 调取 run 递归循环
        第二次 : res = {value:"李四",done:false}
                    过一秒钟 调用run 循环
        第三次 ： res = {value:"王五",done:false}
                    过一秒钟 调用run 循环
        第四次 ：  res = {value:undefined,done:true}
                进入到else 判断 打印所有内容执行完成 ；不会递归调用 ，递归就会停止；
        */

      //方式二: 自带迭代器 那么会拥有一个entries方法
      // let arr = ["张三", "李四", "王五"];
      // console.log(arr.entries());
      // let myIterator = arr.entries();
      // console.log(myIterator.next());
      // console.log(myIterator.next());
      // console.log(myIterator.next());
      // console.log(myIterator.next());
      // console.log(myIterator.next());

      /*
      1.如何判断是否有迭代器
          是否拥有 Symbol.iterator属性
      2.获取迭代器
          方式一: 迭代器 = 数据[Symbol.iterator]()
          方拾贰: 迭代器 = 数据.entries()方法 ,获取的是键名和键值的集合
      */
    </script>
  </body>
</html>
